/* IDA* 迭代加深A*算法
* 估价函数需要满足：不大于实际步数
* 在最终状态下，每本书后面的书的编号应该比当前书多1。
* 每次移动最多会断开三个相连的位置，再重新加入三个相连的位置，因此最多会将3个错误的连接修正，所以如果当前有tot个连接，那么最少需要 ⌈tot/3⌉次操作。
* 因此当前状态s的估价函数可以设计成 f(s)=⌈tot/3⌉。
*/
#include <iostream>
#include <cstring>
using namespace std;
// #define ONLINE_GUDGE
const int N = 16;

int n;
int q[N];
int w[5][N];

int f () { // 估价函数
    int ans = 0;
    for (int i = 0;i + 1 < n;i++) ans += (q[i + 1] != q[i] + 1);
    return (ans + 2) / 3;
}

//检查是否还原
bool check()
{
    for (int i = 0; i < n; i ++ )
        if (q[i] != i + 1)
            return false;
    return true;
}

bool dfs(int depth, int max_depth)
{
    if(depth + f() > max_depth) return false;
    if(check()) return true;
    for(int len = 1; len <= n; len++)
        for(int l = 0; l + len - 1 < n; l++){
            int r = l + len - 1;
            for(int k = r + 1; k < n; k++){
                memcpy(w[depth], q, sizeof q); // 把q[i]复制给w[depth][i]这一维
                int y = l;
                for(int x = r + 1; x <= k; x++, y++) q[y] = w[depth][x]; // 模拟移动(把l到r的书移到第k本书后面)
                for(int x = l; x <= r; x++, y++) q[y] = w[depth][x];
                if(dfs(depth+1, max_depth)) return true;
                memcpy(q, w[depth], sizeof q); // 搜索失败，还原q[]
            }
        }
    return false;

}


int main()
{
    #ifdef ONLINE_GUDGE

    #else
        freopen("./in.txt", "r", stdin);
    #endif

    ios::sync_with_stdio(0); cin.tie(0);

    int T; cin >> T;
    while(T--)
    {
        cin >> n;
        for (int i = 0;i < n;i++) cin >> q[i];

        int depth = 0;
        while (depth < 5 && !dfs(0, depth)) depth ++ ;
        if (depth >= 5) puts ("5 or more");
        else cout << depth << endl;
    }
    return 0;
}